package com.yunpeng.aidevice.dao.util;

import com.yunpeng.aidevice.cache.service.IRelationValueUpdateQueueService;
import com.yunpeng.aidevice.common.dto.cache.UpdateRelationDTO;
import com.yunpeng.aidevice.common.enums.RelationValueEnum;
import com.yunpeng.common.util.AppConfig;

import java.util.HashMap;
import java.util.Map;

/**
 * RelationUpdateUtil
 *
 * @author : Moore(hemw)
 * @date : 2020-04-25
 */
public enum RelationUpdateUtil {
    /**
     * 单例对象
     */
    INSTANCE;


    public IRelationValueUpdateQueueService relationValueUpdateQueueService;


    public IRelationValueUpdateQueueService getRelationValueUpdateQueueService() {
        if (relationValueUpdateQueueService == null) {
            relationValueUpdateQueueService = AppConfig.getBean(IRelationValueUpdateQueueService.class);
        }
        return relationValueUpdateQueueService;
    }

    /**
     * 通用名称更新
     *
     * @param name
     * @param code
     * @param relationValueEnum
     */
    public void commonNameUpdatePush(String name, String code, RelationValueEnum relationValueEnum) {
        UpdateRelationDTO updateRelationDTO = new UpdateRelationDTO();
        updateRelationDTO.setUpdateTable(relationValueEnum.getName());
        updateRelationDTO.setUpdateTableCodeValue(code);
        Map<String, Object> relationUpdateMap = new HashMap<>(16);
        relationUpdateMap.put("name", name);
        updateRelationDTO.setUpdateKeyValue(relationUpdateMap);
        getRelationValueUpdateQueueService().push(updateRelationDTO);
    }


    /**
     * 用户更新
     *
     * @param name
     * @param code
     */
    public void userInfoUpdatePush(String name, String phone, String email, String code) {
        UpdateRelationDTO updateRelationDTO = new UpdateRelationDTO();
        updateRelationDTO.setUpdateTable(RelationValueEnum.user.getName());
        updateRelationDTO.setUpdateTableCodeValue(code);
        Map<String, Object> relationUpdateMap = new HashMap<>(16);
        relationUpdateMap.put("name", name);
        relationUpdateMap.put("phone", phone);
        relationUpdateMap.put("email", email);
        updateRelationDTO.setUpdateKeyValue(relationUpdateMap);
        getRelationValueUpdateQueueService().push(updateRelationDTO);
    }

    /**
     * 组织更新
     *
     * @param name
     * @param code
     */
    public void orgInfoUpdatePush(String name, String path, String code) {
        UpdateRelationDTO updateRelationDTO = new UpdateRelationDTO();
        updateRelationDTO.setUpdateTable(RelationValueEnum.org.getName());
        updateRelationDTO.setUpdateTableCodeValue(code);
        Map<String, Object> relationUpdateMap = new HashMap<>(16);
        relationUpdateMap.put("name", name);
        relationUpdateMap.put("path", path);
        updateRelationDTO.setUpdateKeyValue(relationUpdateMap);
        getRelationValueUpdateQueueService().push(updateRelationDTO);
    }


    /**
     * 商户默认用户更新
     *
     * @param name
     * @param phone
     * @param email
     * @param merchantCode
     * @param tenantCode
     * @param updateMerchant
     */
    public void merchantDefaultUserInfoUpdatePush(String name, String phone, String email, String merchantCode, String tenantCode, Boolean updateMerchant) {
        UpdateRelationDTO updateRelationDTO = new UpdateRelationDTO();
        updateRelationDTO.setUpdateTable(RelationValueEnum.merchantDefaultUser.getName());
        updateRelationDTO.setUpdateTableCodeValue(merchantCode);
        Map<String, Object> relationUpdateMap = new HashMap<>(16);
        relationUpdateMap.put("name", name);
        relationUpdateMap.put("phone", phone);
        relationUpdateMap.put("email", email);
        relationUpdateMap.put("merchantCode", merchantCode);
        relationUpdateMap.put("tenantCode", tenantCode);
        relationUpdateMap.put("updateMerchant", updateMerchant);
        updateRelationDTO.setUpdateKeyValue(relationUpdateMap);
        getRelationValueUpdateQueueService().push(updateRelationDTO);
    }

    /**
     * 用户绑定组织更新
     *
     * @param orgName
     * @param orgCode
     * @param userCode
     */
    public void userOrgInfoUpdatePush(String orgName, String orgCode, String userCode) {
        UpdateRelationDTO updateRelationDTO = new UpdateRelationDTO();
        updateRelationDTO.setUpdateTable(RelationValueEnum.userOrg.getName());
        updateRelationDTO.setUpdateTableCodeValue(userCode);
        Map<String, Object> relationUpdateMap = new HashMap<>(16);
        relationUpdateMap.put("orgCode", orgCode);
        relationUpdateMap.put("orgName", orgName);
        updateRelationDTO.setUpdateKeyValue(relationUpdateMap);
        getRelationValueUpdateQueueService().push(updateRelationDTO);
    }
}
